/*
 * To change this template, choose Tools | Templates
 * and open the template in the editor.
 */
package edu.ucue.ptc.gco.ngc;

import com.mysql.jdbc.Util;
import edu.ucue.ptc.gco.dao.ObjetivoEmpleadoDAOLocal;
import edu.ucue.ptc.gco.mdl.Empleado;
import edu.ucue.ptc.gco.mdl.ObjetivoEmpleado;
import edu.ucue.ptc.gco.util.AtributoInvalidoException;
import edu.ucue.ptc.gco.util.NoExisteObjetoException;
import edu.ucue.ptc.gco.util.ObjetivoEmpleadoValidatorException;
import edu.ucue.ptc.gco.util.ValidarAtributoUtil;
import java.text.ParseException;
import java.text.SimpleDateFormat;
import java.util.Date;
import java.util.List;
import java.util.logging.Level;
import java.util.logging.Logger;
import javax.ejb.Stateful;
import javax.inject.Inject;
import javax.inject.Named;
import javax.persistence.Query;

/**
 *
 * @author Johnny
 */
@Stateful
@Named(value = "objetivoEmpleadoManager")
public class ObjetivoEmpleadoManajer implements ObjetivoEmpleadoManajerLocal {

    @Inject
    private ObjetivoEmpleadoDAOLocal objetivoEmpleadoDao;
    @Inject
    private UsuarioManagerLocal usuarioManager;
    
    @Inject
    private EmpleadoManagerLocal empMan;
    
    
    
    @Override
    public void crearObjetivoEmpleado(ObjetivoEmpleado objetivoempleado, String usuario, String password) throws ObjetivoEmpleadoValidatorException, AtributoInvalidoException {
        usuarioManager.existeUsuario(usuario, password);
        try {
            ValidarAtributoUtil.validarObjetoNulo("ObjetivoEmpleado", objetivoempleado);
            ValidarAtributoUtil.validarDoubleCero("Monto", objetivoempleado.getMonto());
            ValidarAtributoUtil.validarDoubleNegativo("Monto", objetivoempleado.getMonto());
        } catch (AtributoInvalidoException ex) {
            throw new ObjetivoEmpleadoValidatorException(ex);
        }
        Empleado emp = empMan.buscarEmpleadoPorId(objetivoempleado.getEmpleado().getIdPersona(), usuario, password);
        if (emp == null) {
            throw new ObjetivoEmpleadoValidatorException(new AtributoInvalidoException("Empleado", objetivoempleado.getEmpleado(), new NoExisteObjetoException("No existe el empleado")));
        }
        objetivoEmpleadoDao.crearObjetivoEmpleado(objetivoempleado);
    }

    @Override
    public void modificarObjetivoEmpleado(ObjetivoEmpleado objetivoempleado, String usuario, String password) throws ObjetivoEmpleadoValidatorException, AtributoInvalidoException {
        usuarioManager.existeUsuario(usuario, password);
        try {
            ValidarAtributoUtil.validarObjetoNulo("ObjetivoEmpleado", objetivoempleado);
            ValidarAtributoUtil.validarDoubleCero("Monto", objetivoempleado.getMonto());
            ValidarAtributoUtil.validarDoubleNegativo("Monto", objetivoempleado.getMonto());
        } catch (AtributoInvalidoException ex) {
            throw new ObjetivoEmpleadoValidatorException(ex);
        }
        Empleado emp = empMan.buscarEmpleadoPorId(objetivoempleado.getEmpleado().getIdPersona(), usuario, password);
        if (emp == null) {
            throw new ObjetivoEmpleadoValidatorException(new AtributoInvalidoException("Empleado", objetivoempleado.getEmpleado(), new NoExisteObjetoException("No existe el empleado")));
        }
        objetivoEmpleadoDao.modificarObjetivoEmpleado(objetivoempleado);
    }

    @Override
    public List<ObjetivoEmpleado> listarObjetivoEmpleado(Empleado empleado, String usuario, String password) throws ObjetivoEmpleadoValidatorException, AtributoInvalidoException {
        usuarioManager.existeUsuario(usuario, password);
        Empleado emp = empMan.buscarEmpleadoPorId(empleado.getIdPersona(), usuario, password);
        if (emp == null) {
            throw new ObjetivoEmpleadoValidatorException(new AtributoInvalidoException("Empleado", empleado, new NoExisteObjetoException("No existe el empleado")));
        }
        return objetivoEmpleadoDao.listarObjetivoEmpleado(empleado);
        
    }

    // Add business logic below. (Right-click in editor and choose
    // "Insert Code > Add Business Method")
    @Override
    public void eliminarObjetivoEmpleado(ObjetivoEmpleado objetivoEmpleado, String usuario, String password) throws ObjetivoEmpleadoValidatorException, AtributoInvalidoException {
        usuarioManager.existeUsuario(usuario, password);
        objetivoEmpleadoDao.eliminarObjetivoEmpleado(objetivoEmpleado);
    }

    @Override
    public void eliminarObjetivoEmpleadoPorId(int id, String usuario, String password) throws ObjetivoEmpleadoValidatorException, AtributoInvalidoException {
        usuarioManager.existeUsuario(usuario, password);
        objetivoEmpleadoDao.eliminarObjetivoEmpleadoPorId(id);
    }
    /**
     * Mantienimientos para junit
     */
    @Override
    public ObjetivoEmpleado crearObjetivoEmpleado(String desde, String hasta,double cant, String usuario, String password) throws ObjetivoEmpleadoValidatorException, AtributoInvalidoException{
        ObjetivoEmpleado objetivo=new ObjetivoEmpleado();
        SimpleDateFormat formatoDelTexto = new SimpleDateFormat("yyyy-MM-dd");
        Date inicio=null;
        try {
            inicio = formatoDelTexto.parse(desde); //"2013-07-01"
        } catch (ParseException ex) {  ex.printStackTrace(); }
        Date fin=null;
        try {
            fin = formatoDelTexto.parse(hasta);
        } catch (ParseException ex) {  ex.printStackTrace(); }
        objetivo.setFechaInicio(inicio);
        objetivo.setFechaFinal(fin);
        objetivo.setMonto(cant);
        Empleado empleado=new Empleado();
        empleado.setIdPersona(1);
        empleado.setCedulaRuc("0104030135");
        objetivo.setEmpleado(empleado);
        this.crearObjetivoEmpleado(objetivo, usuario, password);
        return objetivo;
    }
    @Override
   public ObjetivoEmpleado modificarObjetivoEmpleado(int id,String desde, String hasta,double cant, String usuario, 
           String password) throws ObjetivoEmpleadoValidatorException, AtributoInvalidoException{
       ObjetivoEmpleado objetivo=new ObjetivoEmpleado();
        SimpleDateFormat formatoDelTexto = new SimpleDateFormat("yyyy-MM-dd");
        Date inicio=null;
        try {
            inicio = formatoDelTexto.parse(desde); //"2013-07-01"
        } catch (ParseException ex) {  ex.printStackTrace(); }
        Date fin=null;
        try {
            fin = formatoDelTexto.parse(hasta);
        } catch (ParseException ex) {  ex.printStackTrace(); }
        objetivo.setIdObjetivo(id);
        objetivo.setFechaInicio(inicio);
        objetivo.setFechaFinal(fin);
        objetivo.setMonto(cant);
        Empleado empleado=new Empleado();
        empleado.setIdPersona(1);
        objetivo.setEmpleado(empleado);
        this.modificarObjetivoEmpleado(objetivo, usuario, password);
        return objetivo;
   }
    @Override
   public ObjetivoEmpleado eliminarOEPorId(int id, String usuario, String password) throws ObjetivoEmpleadoValidatorException, AtributoInvalidoException{
       ObjetivoEmpleado objetivo=new ObjetivoEmpleado();
        objetivo.setIdObjetivo(id);
        //Empleado empleado=new Empleado();
        //empleado.setIdPersona(1);
        //objetivo.setEmpleado(empleado);
        this.eliminarObjetivoEmpleadoPorId(id, usuario, password);
        return objetivo;
   }
   @Override
    public List<ObjetivoEmpleado> listarObjetivoEmpleado(String usuario, String password) throws ObjetivoEmpleadoValidatorException, AtributoInvalidoException {
        Empleado empleado=new Empleado();
        empleado.setIdPersona(1);
        empleado.setCedulaRuc("0104030135");
        return this.listarObjetivoEmpleado(empleado, usuario, password);
    }
   
    /**
     *
     * @param idEmpleado
     * @param user
     * @param pass
     * @return
     * @throws AtributoInvalidoException
     * @throws ObjetivoEmpleadoValidatorException
     */
    @Override
   public ObjetivoEmpleado verificarObjetivoEmpleado(int idEmpleado,String user,String pass) throws AtributoInvalidoException, ObjetivoEmpleadoValidatorException
    {
        //objetivoEmpleadoDao
        Empleado emp = empMan.buscarEmpleadoPorId(idEmpleado, user, pass);
        if (emp == null) {
            throw new ObjetivoEmpleadoValidatorException(new AtributoInvalidoException("Empleado", idEmpleado, new NoExisteObjetoException("No existe el empleado")));
        }
        List<ObjetivoEmpleado> obj=objetivoEmpleadoDao.listarObjetivoEmpleado(emp);
         return obj.get(0);
        
    }

}
